#include <iostream>
#include <set> // std::set 定义于此
using namespace std;
// C++ 标准库中的 <set> 是一个关联容器，它存储了一组唯一的元素，并按照一定的顺序进行排序。
// <set> 提供了高效的元素查找、插入和删除操作。它是基于红黑树实现的，因此具有对数时间复杂度的查找、插入和删除性能。
// <set> 容器中存储的元素类型必须满足以下条件：
// 1、元素类型必须可以比较大小。
// 2、元素类型必须可以被复制和赋值
int main()
{
    std::set<int> a{1, 2, 3};
    a.insert(4);
    // 1、insert函数：set元素插入可能失败，返回一个包装类型
    std::pair<std::set<int>::iterator, bool> res = a.insert(4); // 向集合中加入元素 4
    // template <typename T, typename U>
    // struct pair
    // {
    //     T first;
    //     U second;
    // };
    cout << "添加" << (res.second ? "成功" : "失败") << endl;

    // 2、erase删除元素：返回删除的元素个数
    int rsp = a.erase(2);

    cout << "删除" << rsp << "个元素" << endl;
    for (int i : a)
    {
        cout << i << endl;
    }
    // 3、find 成员函数以要查找的值作为参数，返回一个迭代器。如果查找到这个元素，则返回指向它的迭代器，否则返回 end() 迭代器
    cout << (a.find(4) == a.end() ? "num not in set" : "num in set") << endl;
    cout << (a.find(5) == a.end() ? "num not in set" : "num in set") << endl;

    // 4、set结构遍历无法修改：会破坏整个数据结构
    // for (int &i : a)
    // {
    //     cout << i << endl;
    // }
    return 0;
}
